/**
 * Created By Zuoqin On 2019/10/24
 * 3D 光线投射器工具
 * 光线投射主要用于物体选择、碰撞检测以及图形成像
 * */
import * as THREE from 'three';

/** 实例化光线投射器对象
 * @returns {Raycaster}
 */
function initRaycaster() {
  const raycaster = new THREE.Raycaster();
  return raycaster;
}

/** 3d场景点击事件
 * @param event 点击事件的$event
 * @param camera 相机对象
 * @param scene 场景对象
 * @returns {{showInfo: boolean}}
 */
function sceneClick(event, camera, scene) {
  const mouse = {};
  mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
  mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
  const raycaster = initRaycaster();
  // 用一个新的原点和方向向量来更新射线（ray）
  raycaster.setFromCamera(mouse, camera);
  // 检查射线和物体之间的所有交叉点（包括或不包括后代），返回一个交叉点对象数组
  // 第二个参数为true则检查所有后代，否则只检查对象本身
  const intersects = raycaster.intersectObjects(scene.children, false);
  // 为了光线投射一个对象的正反两面，设置material的side属性为THREE.DoubleSide
  console.log(intersects);
  const result = {};
  if (intersects.length > 0) {
    result.status = true;
    result.data = intersects;
  } else {
    result.status = false;
    result.data = [];
  }
  return result;
}

export default {
  sceneClick,
};
